#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL;
namespace Cephei.QL.Experimental.Variancegamma
{
    /// <summary> 
	/// ! \ingroup vanillaengines  The FFT engine calculates the values of all options with the same expiry at the same time. For that reason it is very inefficient to price options individually.  When using this engine you should collect all the options you wish to price in a list and call the engine's precalculate method before calling the NPV method of the option. References: Carr, P. and D. B. Madan (1998), "Option Valuation using the fast Fourier transform," Journal of Computational Finance, 2, 61-73.
	/// </summary>
    [Guid ("48B4D997-0680-4b0d-B711-252831E26507"),ComVisible(true)]
	public interface IFFTEngine 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 IFFTEngine Calculate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 IFFTEngine Precalculate(Cephei.Core.IVector<Cephei.QL.IInstrument> optionList);
        /// <summary> 
		/// 
		/// </summary>
		 IFFTEngine Update {get;}
    }   

    /// <summary> 
	/// ! \ingroup vanillaengines  The FFT engine calculates the values of all options with the same expiry at the same time. For that reason it is very inefficient to price options individually.  When using this engine you should collect all the options you wish to price in a list and call the engine's precalculate method before calling the NPV method of the option. References: Carr, P. and D. B. Madan (1998), "Option Valuation using the fast Fourier transform," Journal of Computational Finance, 2, 61-73. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IFFTEngine_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
    }
}

